aboutsummaryrefslogtreecommitdiff
path: root/src/app/(main)/teams/[teamId]/TeamMembersTable.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/app/(main)/teams/[teamId]/TeamMembersTable.tsx')
-rw-r--r--src/app/(main)/teams/[teamId]/TeamMembersTable.tsx55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/app/(main)/teams/[teamId]/TeamMembersTable.tsx b/src/app/(main)/teams/[teamId]/TeamMembersTable.tsx
new file mode 100644
index 0000000..8414908
--- /dev/null
+++ b/src/app/(main)/teams/[teamId]/TeamMembersTable.tsx
@@ -0,0 +1,55 @@
+import { DataColumn, DataTable, Row } from '@umami/react-zen';
+import { useMessages } from '@/components/hooks';
+import { ROLES } from '@/lib/constants';
+import { TeamMemberEditButton } from './TeamMemberEditButton';
+import { TeamMemberRemoveButton } from './TeamMemberRemoveButton';
+
+export function TeamMembersTable({
+ data = [],
+ teamId,
+ allowEdit = false,
+}: {
+ data: any[];
+ teamId: string;
+ allowEdit: boolean;
+}) {
+ const { formatMessage, labels } = useMessages();
+
+ const roles = {
+ [ROLES.teamOwner]: formatMessage(labels.teamOwner),
+ [ROLES.teamManager]: formatMessage(labels.teamManager),
+ [ROLES.teamMember]: formatMessage(labels.teamMember),
+ [ROLES.teamViewOnly]: formatMessage(labels.viewOnly),
+ };
+
+ return (
+ <DataTable data={data}>
+ <DataColumn id="username" label={formatMessage(labels.username)}>
+ {(row: any) => row?.user?.username}
+ </DataColumn>
+ <DataColumn id="role" label={formatMessage(labels.role)}>
+ {(row: any) => roles[row?.role]}
+ </DataColumn>
+ {allowEdit && (
+ <DataColumn id="action" align="end">
+ {(row: any) => {
+ if (row?.role === ROLES.teamOwner) {
+ return null;
+ }
+
+ return (
+ <Row alignItems="center" maxHeight="20px">
+ <TeamMemberEditButton teamId={teamId} userId={row?.user?.id} role={row?.role} />
+ <TeamMemberRemoveButton
+ teamId={teamId}
+ userId={row?.user?.id}
+ userName={row?.user?.username}
+ />
+ </Row>
+ );
+ }}
+ </DataColumn>
+ )}
+ </DataTable>
+ );
+}